#ifndef __CLIENT_SERIALIZE_H_
#define __CLIENT_SERIALIZE_H_

#include <stdint.h>

#include "messages.h"

// encapsula uma mensagem em formato pronto para envio na rede
int encapsulate(char *buf, uint16_t length, char *message);

// serializa uma estrutura do tipo LC
uint16_t serializeLC(char *buf, MessageLC *msg);

// serializa uma estrutura do tipo LS
uint16_t serializeLS(char *buf, MessageLS *msg);

// deserializa uma estrutura do tipo CL (o ponteiro deve ser deleteado)
MessageCL *deserializeCL(char *buf);

// deserializa uma estrutura do tipo SL (o ponteiro deve ser deleteado)
MessageSL *deserializeSL(char *buf);

// concatena em buf os dados empacotados de acordo com format:
// c = uint8_t; h = uint16_t; s = string
uint16_t pack(char *buf, const char *format, ...);

// desempacota de buf os dados empacotados de acordo com format:
// c = uint8_t; h = uint16_t; s = string
uint16_t unpack(char *buf, const char *format, ...);

#endif
